package object;

import java.util.Objects;

/**
 * 使用当前类测试子类重写Object中相关方法
 * <p>
 * Point:点
 * <p>
 * JavaBean:Java语言中一个通用的类，JavaBean是Java语言定义的规范
 */
public class Point {
    private int x;
    private int y;

    public Point() {
    }

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    @Override
    public String toString() {
        //IDEA生成的格式:类名{属性=值,属性=值,...}
        //Point{x=1,y=2}
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }

    @Override
    /**
     * 判断当前点对象是否与给定对象相等。
     *
     * @param o 待比较的对象，期望为{@link Point}类型或其子类实例。
     * @return 如果两个点对象的坐标（x, y）完全相同，则返回 {@code true}；否则返回 {@code false}。
     *
     * <p>相等性判断规则如下：
     * <ul>
     *     <li>如果传入参数 {@code o} 为 {@code null} 或其类与当前点类不匹配，直接返回 {@code false}。</li>
     *     <li>如果传入对象与当前对象引用相同（即 {@code this == o}），则认为两者相等，返回 {@code true}。</li>
     *     <li>通过强制类型转换将传入对象 {@code o} 转换为 {@code Point} 类型，并比较它们的 {@code x} 和 {@code y}
     *         坐标值。若两者坐标完全一致，返回 {@code true}；否则返回 {@code false}。</li>
     * </ul>
     */
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        return x == point.x && y == point.y;
    }


    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
}
